import java.util.ArrayList;
import java.util.List;

/**
 * Created by zhourh on 2018/6/8.
 *
 * 写一个程序，输出从 1 到 n 数字的字符串表示。

 1. 如果 n 是3的倍数，输出“Fizz”；

 2. 如果 n 是5的倍数，输出“Buzz”；

 3.如果 n 同时是3和5的倍数，输出 “FizzBuzz”。

 缓存

 */
public class FizzBuzz {

    public static List<String> cache = new ArrayList<>();

    public static void main(String[] args) {
        System.out.println(new FizzBuzz().fizzBuzz(150));
        System.out.println(new FizzBuzz().fizzBuzz(15));
    }

    public List<String> fizzBuzz(int n) {
        if (n < 1) {
            return null;
        }

        if (n <= cache.size()) {
            return cache.subList(0, n);
        }

        for (int i = cache.size(); i < n; i++) {
            int value = i + 1;
            if (value % 15 == 0) {
                cache.add("FizzBuzz");
            } else if (value % 3 == 0) {
                cache.add("Fizz");
            } else if (value % 5 == 0) {
                cache.add("Buzz");
            } else {
                cache.add(String.valueOf(value));
            }
        }

        return fizzBuzz(n);
    }
}
